﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Data;
using Newtonsoft.Json;


namespace HandMade_Q4T_.Pages
{
    /// <summary>
    /// Summary dascription for WebService1
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
    [System.Web.Script.Services.ScriptService]
    public class WebService1 : System.Web.Services.WebService
    {
        C_KhachHang kh; 
        C_SanPham sp1;
        C_Comment cm;
        List<C_SanPham> list_hotproduct;
        List<C_SanPham> list;
        /// <summary>
        /// Lấy tất cả sản phẩm hot
        /// </summary>
        /// <returns></returns>
        [WebMethod]
        public object List_Hot_Product(string arrange)
        {
            sp1 = new C_SanPham();
            list_hotproduct = new List<C_SanPham>();
            string select_hotproduct;
            if (arrange == "ASC")
            {
                select_hotproduct = "select top 9 masp,tensp,hinhsp,mota,ngaycapnhat,soluong,dongia,solanxem,tenloai,tenncc,tencl from CHATLIEU cl,SANPHAM sp,NHACUNGCAP ncc,LOAISP l where cl.macl=sp.macl and sp.mancc=ncc.mancc and sp.maloai=l.maloai order by dongia asc";
            }
            else
            {
                select_hotproduct = "select top 9 masp,tensp,hinhsp,mota,ngaycapnhat,soluong,dongia,solanxem,tenloai,tenncc,tencl from CHATLIEU cl,SANPHAM sp,NHACUNGCAP ncc,LOAISP l where cl.macl=sp.macl and sp.mancc=ncc.mancc and sp.maloai=l.maloai order by dongia desc";
            }
            DataTable dt= sp1.Get_Data(select_hotproduct);
            Gan_Giatri(list_hotproduct, dt);
            return list_hotproduct;
        }

        /// <summary>
        /// Lấy tất cả sản phẩm theo loại
        /// </summary>
        /// <param name="tenloai">Tên loại sản phẩm</param>
        /// <returns></returns>
        [WebMethod]
        public Object List_product_categori(string tenloai,string arrange)
        {
            sp1 = new C_SanPham();
            list = new List<C_SanPham>();
            string select_hotproduct;
            if (arrange == "ASC")
            {
                select_hotproduct = "select top 9 masp,tensp,hinhsp,mota,ngaycapnhat,soluong,dongia,solanxem,tenloai,tenncc,tencl from CHATLIEU cl,SANPHAM sp,NHACUNGCAP ncc,LOAISP l where cl.macl=sp.macl and sp.mancc=ncc.mancc and  sp.maloai=l.maloai and tenloai=N'" + tenloai + "' order by dongia asc ";
            }
            else
            {
                select_hotproduct = "select top 9 masp,tensp,hinhsp,mota,ngaycapnhat,soluong,dongia,solanxem,tenloai,tenncc,tencl from CHATLIEU cl,SANPHAM sp,NHACUNGCAP ncc,LOAISP l where cl.macl=sp.macl and sp.mancc=ncc.mancc and  sp.maloai=l.maloai and tenloai=N'" + tenloai + "' order by dongia desc ";
            }
            DataTable dt = sp1.Get_Data(select_hotproduct);
            Gan_Giatri(list, dt);
            return list;
        }

        /// <summary>
        /// Tìm kiếm sản phẩm theo tham số truyền vào
        /// </summary>
        /// <param name="ten">Tên sản phẩm</param>
        /// <param name="LOAISP">Loại sản phẩm</param>
        /// <param name="cl">Chất liệu</param>
        /// <param name="ncc">Nhà cung cấp</param>
        /// <returns></returns>
        [WebMethod]
        public Object Search_Express(string ten,string loai,string cl, string ncc)
        {
            sp1 = new C_SanPham();
            list = new List<C_SanPham>();
            string select_product_where = "select * from SANPHAM s,LOAISP l,CHATLIEU c,NHACUNGCAP n where s.maloai=l.maloai and s.macl=c.macl and s.mancc=n.mancc and tensp like '%"+ ten +"%' and tenloai ='"+ loai +"' and tencl=N'"+ cl+"' and tenncc='"+ncc+"'";
            DataTable dt = sp1.Get_Data(select_product_where);
            Gan_Giatri(list, dt);
            return list;
        }

        /// <summary>
        /// Lấy tất cả sản phẩm cùng loại, chất liệu, nhà cung cấp
        /// </summary>
        /// <param name="LOAISP">Loại sản phẩm</param>
        /// <param name="cl">Chất liệu</param>
        /// <param name="ncc">Nhà cung cấp</param>
        /// <returns></returns>
        [WebMethod]
        public Object Product_Same(string loai, string cl, string ncc)
        {
            sp1 = new C_SanPham();
            list = new List<C_SanPham>();
            string select_product_where = "select * from SANPHAM s,LOAISP l,CHATLIEU c,NHACUNGCAP n where s.maloai=l.maloai and s.macl=c.macl and s.mancc=n.mancc and tenloai=N'"+ loai +"' and tencl=N'"+cl +"' and tenncc=N'"+ncc+"'";
            DataTable dt = sp1.Get_Data(select_product_where);
            Gan_Giatri(list, dt);
            return list;
        }

        /// <summary>
        /// Hàm xử lí đăng nhập
        /// </summary>
        /// <param name="id">Tên user</param>
        /// <param name="pass">Password</param>
        /// <returns></returns>
        [WebMethod (EnableSession=true)]
        public int DangNhap(string id, string pass)
        {
            kh = new C_KhachHang();
            int check = 0;
            string sql = string.Format("select matkhau from KHACHHANG where tendn='{0}'", id);
            DataTable dt = kh.Get_pass(sql);
            if (dt.Rows.Count > 0)
            {
                foreach (DataRow dtr in dt.Rows)
                {
                    if (pass == dtr[0].ToString())
                    {
                        check = 1;
                        Session["login"] = id;
                    }
                    else
                        check = 0;
                }
            }            
            return check;
        }
        /// <summary>
        /// Xoá user
        /// </summary>
        /// <returns></returns>
        [WebMethod(EnableSession = true)]
        public bool Del_User()
        {
            Session["login"] = null;
            return true;
        }

        /// <summary>
        /// Kiểm tra tồn tại của user
        /// </summary>
        /// <returns></returns>
        [WebMethod(EnableSession = true)]
        public string Check_User()
        {
            string user;
            if (Session["login"] != null)
            {
                user = Session["login"].ToString();
                return user;
            }
            return null;
        }

        /// <summary>
        /// Lấy dữ liệu theo pageindex cho Product (Phân trang ajax)
        /// </summary>
        /// <param name="pageIndex">vị trí trang</param>
        /// <returns>chuỗi Json trang sản phẩm kế tiếp</returns>
        [WebMethod]
        public string GetCustomers(int pageIndex,string arrange)
        {
            C_XLDL db = new C_XLDL();
            string json = JsonConvert.SerializeObject(db.GetCustomersData(pageIndex,arrange));
            return json;
        }

        /// <summary>
        /// Lấy dữ liệu theo pageindex cho Category (Phân trang ajax)
        /// </summary>
        /// <param name="pageIndex">vị trí trang</param>
        /// <param name="tenloai">tên loại</param>
        /// <returns>chuỗi json trang sản phẩm kế tiếp</returns>
        [WebMethod]
        public string GetCustomers_Cate(int pageIndex, string tenloai,string arrange)
        {
            C_XLDL db = new C_XLDL();
            string json = JsonConvert.SerializeObject(db.GetCustomersData_Cate(pageIndex, tenloai,arrange));
            return json;
        }

        public void Gan_Giatri(List<C_SanPham> list,DataTable dt)
        {
            foreach (DataRow dtr in dt.Rows)
            {
                C_SanPham sp = new C_SanPham();
                sp.Masp = dtr["masp"].ToString();
                sp.Tensp = dtr["tensp"].ToString();
                sp.Hinhsp = dtr["hinhsp"].ToString();
                sp.Mota = dtr["mota"].ToString();
                sp.Dongia = int.Parse(dtr["dongia"].ToString());
                sp.Solanxem = int.Parse(dtr["solanxem"].ToString());
                sp.Tenloai = dtr["tenloai"].ToString();
                sp.Tencl = dtr["tencl"].ToString();
                sp.Tenncc = dtr["tenncc"].ToString();
                sp.Ngaycapnhat = dtr["ngaycapnhat"].ToString();
                list.Add(sp);
            }
        }

        /// <summary>
        /// Tạo và thêm giỏ hàng
        /// </summary>
        /// <param name="id">id sản phẩm</param>
        /// <param name="ten">tên sản phẩm</param>
        /// <param name="sl">số lượng sản phẩm</param>
        /// <param name="gia">đơn giá sản phẩm</param>
        [WebMethod(EnableSession = true)]
        public bool Creat_Cart(string masp)
        {
            string tensanpham;
            double dongia;
            C_SanPham sp = new C_SanPham();
            string sql = string.Format("select tensp,dongia from SANPHAM where masp={0}",masp);
            DataTable data_sql = sp.Get_Data(sql); // Lấy sản phẩm lên từ ID để tránh bị hack từ phia client
            tensanpham = data_sql.Rows[0][0].ToString();
            dongia = double.Parse(data_sql.Rows[0][1].ToString());
            DataTable dt ; // Bảng chứa dữ liệu giỏ hàng 
            if (Session["Cart"] == null)
            {
                dt = new DataTable();
                dt.Columns.Add("masp");
                dt.Columns.Add("tensanpham");
                dt.Columns.Add("dongia");
                dt.Columns.Add("soluong");
            }
            else
            {
                dt = (DataTable)Session["Cart"];
                int dong = SPdacotronggiohang(masp, dt);
                if (dong != -1)
                {
                    dt.Rows[dong]["soluong"] = Convert.ToInt32(dt.Rows[dong]["soluong"]) + 1;
                }
                else
                {
                    DataRow dr = dt.NewRow();
                    dr["masp"] = masp;
                    dr["tensanpham"] = tensanpham;
                    dr["dongia"] = dongia;
                    dr["soluong"] = 1;
                    dt.Rows.Add(dr);
                }
            }
            Session["Cart"] = dt;
            if (Session["Cart"] == null)
                return true;
            return false;
        }

        /// <summary>
        /// Hàm chỉnh sửa số lượng sản phẩm
        /// </summary>
        /// <param name="id">id sản phẩm</param>
        /// <param name="sl">số lượng sản phẩm</param>
        [WebMethod(EnableSession=true)]
        public void Edit_Cart(string id, int sl)
        {
            DataTable dt = Session["Cart"] as DataTable;
            for (int i=0;i<dt.Rows.Count;i++)
            {
                if (dt.Rows[i]["masp"].ToString() == id)
                {
                    if (Convert.ToInt32(dt.Rows[i]["soluong"]) < 0)
                    {
                        dt.Rows.RemoveAt(i);
                    }
                    else
                    {
                        dt.Rows[i]["soluong"] =  sl.ToString();
                    }

                }
            }
            Session["Cart"] = dt;
        }

        /// <summary>
        /// Xoá sản phẩm trong giỏ hàng với id
        /// </summary>
        /// <param name="id">id sản phẩm</param>
        [WebMethod(EnableSession=true) ]
        public void Remove_product_in_cart(string id)
        {
            DataTable dt = new DataTable();
            dt =   Session["Cart"] as DataTable;
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                if (dt.Rows[i]["masp"].ToString() == id)
                {
                    dt.Rows.RemoveAt(i);
                }
            }
            Session["Cart"] = dt;
        }

        /// <summary>
        /// Kiểm tra sản phẩm đã có trong giỏ hàng
        /// </summary>
        /// <param name="masp">Mã sản phẩm</param>
        /// <param name="dt">giỏ hàng cần kiểm tra</param>
        /// <returns>vị trí dòng cần chỉnh sửa</returns>
        private int SPdacotronggiohang(string masp, DataTable dt)
        {
            int dong = -1;
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                if (dt.Rows[i]["masp"].ToString() == masp)
                {
                    dong = i;
                    break;
                }
            }
            return dong;
        }

        /// <summary>
        /// Đăng kí
        /// </summary>
        /// <param name="tenkh">Họ tên khách hàng</param>
        /// <param name="ten_user">Tên đăng nhập</param>
        /// <param name="pass">PassWord</param>
        /// <param name="mail">Địa chỉ email</param>
        /// <param name="gioitinh">Giới tíh khách hàng</param>
        /// <param name="diachi">Địa chỉ khách hàng</param>
        /// <param name="sdt">Số điện thoại của khàng</param>
        /// <returns></returns>
        [WebMethod(EnableSession=true)]
        public int DangKi(string tenkh, string ten_user, string pass, string mail, string gioitinh, string diachi, string sdt)
        {
            kh = new C_KhachHang();
            string str = string.Format("exec sp_them_khachhang N'{0}',N'{1}',N'{2}','{3}','{4}','{5}','{6}'",tenkh,gioitinh,diachi,mail,sdt,ten_user,pass);
            try
            {
                kh.Dangki(str);
                Session["login"] = ten_user;
                return 2;
            }
            catch
            {
                return 3;
            }         
        }

        /// <summary>
        /// Kiểm tra trùng lặp tên đăng nhập khi đăng kí
        /// </summary>
        /// <param name="username">tên đăng nhập cần kiểm tra</param>
        /// <returns>1 or 0</returns>
        [WebMethod]
        public int Check_TenDangNhap(string username)
        {
            DataTable dt = new DataTable();
            kh = new C_KhachHang();
            dt = kh.Get_user(string.Format("select * from KHACHHANG where tendn='{0}'", username));
            if (dt.Rows.Count > 0)
                return 1;
            else
                return 0;
        }

        /// <summary>
        /// Kiểm tra sự tồn tại của email
        /// </summary>
        /// <param name="mail">email cần được kiểm tra</param>
        /// <returns>1 or 0</returns>
        [WebMethod]
        public int Check_Email(string mail)
        {
            DataTable dt = new DataTable();
            kh = new C_KhachHang();
            dt = kh.Get_user(string.Format("select tendn from KHACHHANG where email='{0}'", mail));
            if (dt.Rows.Count > 0)
                return 1;
            else
                return 0;
        }

        /// <summary>
        /// Tìm kiếm sản phẩm với từ khoá key
        /// </summary>
        /// <param name="text">từ khoá</param>
        /// <returns>list danh sách sản phẩm</returns>
        [WebMethod]
        public object Product_Search(string text)
        {
            sp1 = new C_SanPham();
            list = new List<C_SanPham>();
            string sql = string.Format("select masp,tensp,hinhsp,mota,ngaycapnhat,soluong,dongia,solanxem,tenloai,tenncc,tencl from CHATLIEU cl,SANPHAM s,LOAISP l,NHACUNGCAP n where cl.macl=s.macl and s.mancc=n.mancc and s.maloai=l.maloai and  tensp like N'%{0}%'",text);
            DataTable dt = sp1.Get_Data(sql);
            Gan_Giatri(list, dt);
            return list;
        }

        /// <summary>
        /// Lấy sản phẩm theo ID
        /// </summary>
        /// <param name="id">ID sản phẩm</param>
        /// <returns>trả về danh sách các sản phẩm</returns>
        [WebMethod]
        public object Get_Product_From_ID(string id)
        {
            sp1 = new C_SanPham();
            list = new List<C_SanPham>();
            string sql = string.Format("select masp,tensp,hinhsp,mota,ngaycapnhat,soluong,dongia,solanxem,tenloai,tenncc,tencl from CHATLIEU cl,SANPHAM s,LOAISP l,NHACUNGCAP n where cl.macl=s.macl and s.mancc=n.mancc and s.maloai=l.maloai and  s.masp={0}",id);
            DataTable dt = sp1.Get_Data(sql);
            Gan_Giatri(list, dt);
            return list;
        }

        /// <summary>
        /// Comment từ khách hàng
        /// </summary>
        /// <param name="masp">mã sản phẩm</param>
        /// <param name="name">tên khách hàng</param>
        /// <param name="email">email khách hàng</param>
        /// <param name="comment">lời bình luận từ khách hàng</param>
        /// <returns>true or false</returns>
        [WebMethod]
        public bool Comment(string masp,string name,string email,string comment)
        {
            string sql = string.Format("exec sp_them_comment '{0}','{1}',{2},N'{3}','{4}','{5}'",masp,comment,0,name,email,0);
            cm = new C_Comment();
            if (cm.Update_Comment(sql))
                return true;
            return false;
        }

        /// <summary>
        /// Lấy comments cho masp
        /// </summary>
        /// <param name="masp">mã sản phẩm</param>
        /// <returns>danh sách comments</returns>
        [WebMethod]
        public object Load_Comment(string masp)
        {
            cm = new C_Comment();
            List<C_Comment> list = new List<C_Comment>();
            string sql = string.Format("select * from Comment where masp='{0}' and duyet={1}",masp,1);
            list = cm.Get_Comment_checked(sql);
            return list;
        }

        /// <summary>
        /// Cập nhật số lần xem cho masp
        /// </summary>
        /// <param name="masp">mã sản phẩm</param>
        [WebMethod]
        public bool Update_Views(string masp)
        {
            sp1 = new C_SanPham();
            string sql = string.Format("update Sanpham set solanxem=solanxem+1 where masp={0} ",masp);
            if (sp1.Update_Data(sql) == true)
                return true;
            return false;
        }
    }
}
